package tests;

import static org.junit.Assert.*;

import org.junit.Test;

import excepciones.ExcepcionCantidadDeTarjetasAmarillasIncorrecta;
import excepciones.ExcepcionNumeroDeFechaImposible;

import programa.Arquero;

public class TestsArquero {

	@Test
	public void testSiUnArqueroAtajaUnPenalDeberiaSumar3PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.atajoCantidadDePenalesEnLaFecha(1, i);
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == 3);
			
		}
		
	}
	
	//***********************************************************************
	
	@Test
	public void testSiUnArqueroObtuvoVayaInvictaDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.obtuvoVayaInvictaEnLaFecha(i);
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnArqueroHaceUnGolDePenalDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.hizoCantidadDeGolesDePenalEnLaFecha(1, i);
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//*************************************************************************
		
	@Test
	public void testSiUnArqueroHaceUnGolDeJugadaAfavorDeberiaSumar6PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.hizoCantidadDeGolesDeJugadaAfavorEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == 6);
			
		}
		
	}
	
	//*************************************************************************
	
	@Test
	public void testSiUnArqueroHaceUnGolEnContraDeberiaRestar3PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.hizoCantidadDeGolesEnContraEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == -3);
			
		}
		
	}
	
	//*************************************************************************
	
	@Test
	public void testLaCantidadDePenalesAtajadosDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Agustin Orion";
		
		int unaCantidadDePenales;
			
		Arquero unArquero = new Arquero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDePenales = (int) Math.floor(Math.random() * 10 + 1);
			
			unArquero.atajoCantidadDePenalesEnLaFecha(unaCantidadDePenales, i);
			
			assertTrue(unArquero.obtenerCantidadDePenalesAtajadosDeLaFecha(i) == unaCantidadDePenales);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDePenalesAtajadosLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Agustin Orion";
			
		Arquero unArquero = new Arquero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertTrue(unArquero.obtenerCantidadDePenalesAtajadosDeLaFecha(i) == 0);
				
		}
			
	}
	
	//****************************************************************************
	
	@Test
	public void testSiUnArqueroEstaAmonestadoDeberiaRestar1PuntoExtraPorFecha() throws ExcepcionCantidadDeTarjetasAmarillasIncorrecta, ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Cristian Alvarez", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.obtuvoCantidadDeTarjetasAmarillasEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == -1);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnArqueroFueExpulsadoDeberiaRestar2PuntosPorFecha() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.salioExpulsadoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnArqueroSaleFiguraEnUnaFechaDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.salioFiguraEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnArqueroSaleChenemigoEnUnaFechaDeberiaRestar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Arquero unArquero = new Arquero("Agustin Orion", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unArquero.salioChenemigoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unArquero.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}
	
	//************************************************************************
	
}
